﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
            //请编写相关代码，
            //1、捕获FormatException异常，并打印输出“异常已处理；
            //2、捕获OverflowException异常，数值超出float范围的异常，并打印输出“异常已处理；
            //3、捕获一般异常Exception异常。
            //4、最终处理finally
            //录入成绩结束后，请输出，总学生数，总分数，平均分。






            //try
            //{
            //    Console.WriteLine("输入学生数：");
            //    float num = float.Parse(Console.ReadLine());

            //    float sum = 0;

            //    for (int i = 0; i < num; i++)
            //    {
            //        Console.WriteLine("输入成绩：");
            //        float result = float.Parse(Console.ReadLine());

            //        sum = sum + result;
            //    }
            //    Console.WriteLine();
            //    Console.WriteLine("总分数" + sum);

            //    Console.WriteLine("平均分" + sum / num);

            //}
            //catch (FormatException f)
            //{
            //    throw new Exception("捕获FormatException异常，异常已处理");
            //}
            //catch (OverflowException o)
            //{
            //    throw new Exception("捕获OverflowException异常，异常已处理");
            //}

            //catch (Exception)
            //{
            //    throw new Exception("捕获一般异常Exception异常,异常已处理");
            //}
            //finally
            //{
            //    Console.WriteLine();
            //    Console.WriteLine("到达最后");
            //}



            //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，另一个值表示用户想要从银行账户中提取的金额。
            //实现存取款功能，
            //用户功能选择：1、存款，2、取款
            //取款时：
            //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”
            //，如此以确保取款金额始终不大于当前余额。
            //操作结束，打印输出余额是多少。
            //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。
           

            double[] bank = new double[1];
            home( bank);


        }

        private static void home(double[] bank)
        {
            
                Console.WriteLine("用户功能选择：1、存款，2、取款");
                int input = int.Parse(Console.ReadLine());



                switch (input)
                {
                    case 1:
                        StorageMoney(bank, input);
                        home(bank);
                        break;
                    case 2:
                        TakeMoney(bank, input);
                        home(bank);
                        break;
                    default:
                        Console.WriteLine("?");
                        break;
                }
            
            
        }

        private static void TakeMoney(double[] bank, int input)
        {
            Console.WriteLine("当前金额为：" + bank[0]);

            Console.WriteLine("输入你取走的金额：");
            double TM = double.Parse(Console.ReadLine());

            if (TM > bank[0])
            {
                throw new ArgumentOutOfRangeException("取款金额大于余额，请重新输入");
               
            }
            else
            {
                try
                {
                    bank[0] = bank[0] - TM;
                    Console.WriteLine("剩余金额为" + bank[0]);
                }
                catch (Exception)
                {
                    throw;
                }
               
            }
           
        }

        private static void StorageMoney(double[] bank, int input)
        {
            Console.WriteLine("输入你要存入的金额：");
            double SM = double.Parse(Console.ReadLine());
            try
            {
                bank[0] = SM;
                Console.WriteLine("成功存入{0}元", bank[0]);
            }
            catch (Exception)
            {
                throw;
            }
            
        }
    }
}
